#include "KamaCoder.h"
using namespace std;

// 主函数，用于处理输入和输出结果
int KamaCoder110::run() {
  // 输入数据
  int n;
  cin >> n;  // 字符串子集的数量
  string startStr, endStr, str;
  unordered_set<string> strSet;  // 字符串子集的集合
  cin >> startStr >> endStr;     // 起始字符串和终止字符串
  for (int i = 0; i < n; i++) {
    cin >> str;          // 字符串子集s
    strSet.insert(str);  // 插入字符串子集到集合中
  }
  // 定义map，用于存储字符串子集和其对应的步长
  unordered_map<string, int> strMap;

  // 初始化对列
  queue<string> que;
  que.push(startStr);    // 起始字符串入队
  strMap[startStr] = 1;  // 起始字符串的步长为1

  // 广度优先搜索
  while (!que.empty()) {
    string curStr = que.front();  // 取出队首元素
    que.pop();                    // 出队

    // 遍历当前字符串的所有单个字符
    for (int i = 0; i < curStr.size(); i++) {
      string newStr = curStr;

      // 将单个字符替换成26字符中的其他字符
      for (char c = 'a'; c <= 'z'; c++) {
        if (c == curStr[i]) continue;  // 跳过当前字符
        newStr[i] = c;

        if (newStr == endStr) {
          cout << strMap[curStr] + 1 << endl;  // 找到终止字符串，输出步长
          return 0;
        }
        // 新字符串在集合中，并且map中不存在该字符串
        if (strSet.count(newStr) &&
            strMap.find(newStr) == strMap.end()) {  // 新字符串在集合中，入队
          que.push(newStr);
          strMap[newStr] = strMap[curStr] + 1;
        }
      }
    }
  }
  // 没有找到终止字符串
  cout << 0 << endl;  // 输出步长为0
  return 0;
}